/*题目内容：
Angel最近无聊，去了圣诞岛(CX *^_^*)，他喜欢无目的的乱逛，当然，他不会轻易地回头。Angel想

去广场，那么，他什么时候才能到呢？你已经得到了CX的地图，地图上有N(N <= 100)个交叉路口，交

叉路口之间有马路相连接(不超过1000条马路)。因为CX的人遵循奇怪的规则，道路都是单向的，不同

的道路之间有一定的距离，我们假设Angel所在的地点为点1，广场所在点为N。假设Angel走一单位距

离需要一单位时间。问Angel最早和最迟什么时候到达广场？ 
输入描述
本题有多组数据，第一行N, M，M是边的数量,以后M行，每行3个整数X, Y, Weight，代表一条从X

城市到Y城市，长度为Wweight的边。

输出描述
每组数据，第一行是最少时间，第二行是最迟时间，要是可怜的Angel可能永远到不了广场，输

出一行Never。

输入样例
5 5
1 2 1
1 4 10
2 3 1
3 4 1
4 5 1

输出样例
4
11
*/
#include<stdio.h>
int book[105];
int dp_max[105],dp_min[105];
int road[105][105];
int n;
void dfs1( int start )
{
	int next;
	for(next=1;next<=n;next++)
	{
		if(!book[next]&&road[start][next])
		{
			book[next]=1;
			if(dp_min[start]+road[start][next] < dp_min[next])
			{
				dp_min[next] = dp_min[start]+road[start][next];
				dfs1(next);
			}
			book[next]=0;
		}
	}
	return;
}
void dfs2( int start )
{
	int next;
	for(next=1;next<=n;next++)
	{
		if(!book[next]&&road[start][next])
		{
			book[next]=1;
			if(dp_max[start]+road[start][next] > dp_max[next])
			{
				dp_max[next] = dp_max[start]+road[start][next];
				dfs2(next);
			}
			book[next]=0;
		}
	}
	return;
}
int main()
{
	int i,m,ts,tn,tlen;
	for(i=2;i<=105;i++)
		dp_min[i]=9e6;
	scanf("%d%d",&n,&m);getchar();
	for(i=1;i<=m;i++)
	{
		scanf("%d%d%d",&ts,&tn,&tlen);
		road[ts][tn]=tlen;
	}
	dfs1(1);dfs2(1);
	if(dp_max[n])
		printf("%d\n%d\n",dp_min[n],dp_max[n]);
	else
		printf("Never\n");
	return 0;
}
